// 这个文件是客户端
// 客户端和服务端的通信采用共享内存的方式
// 客户端负责 :
// 给服务端发送消息 , 目的让客户端接收到消息

// 所以 , 对客户端来说 , 只需要获取共享内存的起始虚拟地址和大小就可以拿到整个共享内存了

#include "shm.hpp"
#include "FIFO.hpp"
int main()
{
    Shm_m shm(USER); // 构造时会自动获取共享内存

    FileOper file(PATH, FILENAME);
    file.OpenForWrite();
    
    // 挂接
    shm.Attach();

    // 挂接完成后 , 即 : 映射到两个进程虚拟地址空间中了 , 至此二者看到了同一份资源

    // 获取虚拟地址
    int index = 0;
    char *addar = (char *)shm.VirtualAddar();
    // 获取后当做一个字符数组 , 客户端只负责写内容 !
    for (int i = 'A'; i <= 'Z'; ++i)
    {
        // AA BB CC 这样子
        addar[index] = i;
        addar[index + 1] = i;
        sleep(1);
        addar[index + 2] = 0;

        // 唤醒
        file.Wakeup();
    }
    // 告诉另一个进程我要退了 !
    std::cout << "I exit !" << std::endl;

    return 0;
}